package com.itany.corejava.code14_lambda;

import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

/**
 * @author 石小俊
 * @date 2023年05月30日 16:09
 */
public class Test05_函数型接口 {

    public static void main(String[] args) {
        // 匿名内部类方式
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
        Integer length = testFunction(new Function<List<Integer>, Integer>() {
            @Override
            public Integer apply(List<Integer> integers) {
                return list.size();
            }
        }, list);
        System.out.println(length);

        // Lambda表达式方式
        length = testFunction(integers -> list.size(), list);
        System.out.println(length);
    }

    /**
     * 函数型接口Function<T, R>,方法R apply(T t);
     * 其接口泛型类型与方法的参数与返回值相关
     * 第一个泛型类型与方法的参数类型一致,第二个泛型类型与方法的返回值类型一致
     * @param function
     * @param list
     * @return
     */
    public static Integer testFunction(Function<List<Integer>, Integer> function, List<Integer> list) {
        return function.apply(list);
    }

}
